package br.org.isvi.interpretador.portugol.access;

import br.org.isvi.interpretador.portugol.model.Aluno;
import br.org.isvi.interpretador.portugol.model.Professor;

public class Session {
	
	private static Session instance = new Session();
	
	private Professor professor;
	private Aluno aluno;
	
	private Session() {
	}
	
	public static Session getInstance() {
		return instance;
	}
	
	public boolean login(Professor professor, boolean cadastrar) {
		
		Professor prof = new ProfessorDAO().porLogin(professor.getLogin());
		boolean ret = false; 
		
		if( prof != null) {
			ret = professor.getPassword().equals(prof.getPassword());
			if(ret) {
				this.professor = prof; 
			}
		} else if(cadastrar) {
			Professor pr = new ProfessorDAO().novo();
			
			pr.setLogin(professor.getLogin());
			pr.setPassword(professor.getPassword());
			
			new ProfessorDAO().persistir();
			this.professor = new ProfessorDAO().porLogin(professor.getLogin());
			ret = true;
		}
		
		return ret;
	}
	
	public boolean login(Aluno aluno, boolean cadastrar) {
		
		Aluno al = new AlunoDAO().porLogin(aluno.getLogin(), aluno.getToTurma());
		
		boolean ret = false; 
		
		if( al != null) {
			ret =  aluno.getPassword().equals(al.getPassword());
			if(ret) {
				this.aluno = al; 
			}
			
		} else if(cadastrar) {
			Aluno a = new AlunoDAO().novo();
			
			a.setToTurma(aluno.getToTurma());
			a.setLogin(aluno.getLogin());
			a.setPassword(aluno.getPassword());
			
			new AlunoDAO().persistir();
			this.aluno = new AlunoDAO().porLogin(aluno.getLogin(), aluno.getToTurma());
			ret = true;
		}
		
		return ret;
	}
	
	public void logout() {
		aluno = null;
		professor = null;
	}
	
	public Professor getProfessor() {
		return professor;
	}
	
	public Aluno getAluno() {
		return aluno;
	}

	public boolean isLogged() {
		return (professor != null || aluno != null);
	}
}
